Laravel目前支援四個資料庫:
資料庫的設定位於config/database.php
,已經寫好連接不同資料庫的預設資訊。我們要用的是MySQL,就用它來舉個栗子,MySQL的連線設定長這樣:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
],
其中一些設定值是env( , )
,這個函式是指該設定值會參考.env
(環境設定檔)內容,如果環境設定檔這個值是default,就會使用,
後面的內容。
如果不想用MySQL想改用MariaDB,一樣也是修改mysql設定的參數。
另外有一行
'default' => env('DB_CONNECTION', 'mysql'),
是用來指定我的Project要連結的資料庫是哪個,像我要連MySQL後面就是接mysql。
做到這裡時,有碰到phpMyAdmin無法連線MySQL的問題,大概講一下後來的解決方式。
共兩個設定檔laravel/laradock/.env
和laravel/.env
,兩邊都要修改,將MySQL的帳號、密碼跟Database名稱修改一致。帳密要夠長夠複雜,不然MySQL可能會不接受(test、user之類的盡量不要)。
// laravel\laradock\.env
MYSQL_DATABASE=db_name
MYSQL_USER=user_name
MYSQL_PASSWORD=user_password
PMA_USER=user_name
PMA_PASSWORD=user_password
// laravel\.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=db_name
DB_USERNAME=user_name
DB_PASSWORD=user_password
特別注意DB_HOST
要改成mysql。
Project的設定檔要因應環境來修改,在Docker的環境下,每個Container都可以視作一個伺服器,所以對他們而言127.0.0.1是自己,但我們不會希望phpMyAdmin是連給自己吧:)
所以我們要讓phpMyAdmin再往外連到外部伺服器(你的主機本體),然後從外面連回來MySQL的port 3306。